#define _CRT_SECURE_NO_WARNINGS

class MyQueue {
    stack<int> s1;
    stack<int> s2;
public:
    MyQueue() {}

    void push(int x) {
        s1.push(x);
    }

    int pop() {
        if (s2.empty())
        {
            while (!s1.empty())
            {
                s2.push(s1.top());
                s1.pop();
            }
        }
        int ret = s2.top();
        s2.pop();
        return ret;
    }

    //    int peek() {
    //        if(s2.empty())
    //        {
    //            while(!s1.empty())
    //            {
    //                s2.push(s1.top());
    //                s1.pop();
    //            }
    //        }
    //        int ret = s2.top();
    //        return ret;
    //    }

    int peek() {
        int tmp = this->pop();
        s2.push(tmp);
        return tmp;
    }

    bool empty() {
        if (s1.empty() && s2.empty())
            return true;
        return false;
    }
};

class MyStack {
    queue<int> q1;
    queue<int> q2;
public:
    MyStack() {}

    void push(int x) {
        if (q2.empty())
            q1.push(x);
        else
            q2.push(x);
    }

    int pop() {
        int tmp;
        if (q2.empty())
        {
            while (q1.size() != 1)
            {
                q2.push(q1.front());
                q1.pop();
            }
            tmp = q1.front();
            q1.pop();
        }
        else
        {
            while (q2.size() != 1)
            {
                q1.push(q2.front());
                q2.pop();
            }
            tmp = q2.front();
            q2.pop();
        }
        return tmp;
    }

    int top() {
        int ret = this->pop();
        this->push(ret);
        return ret;
    }

    bool empty() {
        if (q1.empty() && q2.empty())
            return true;
        return false;
    }
};